package tr.com.stackdeveloper.esgm;
import android.content.Context;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;
public class JsObject
{
private Context mContext;
private byte[] mDecodedString;
private ImageDataResultHandler mResultHandler;
private WebViewHtmlContentHandler mWebViewHtmlContentHandler;
private WebViewHtmlContentHandler mWebViewHtmlContentHandler2;
public JsObject(Context context)
{
this.mContext = context;
}
public void addImageDataResultHandler(ImageDataResultHandler handler)
{
this.mResultHandler = handler;
}
public void addWebViewHtmlContentHandler(WebViewHtmlContentHandler handler)
{
this.mWebViewHtmlContentHandler = handler;
}
@JavascriptInterface
public void showBase64Image(String base64Image)
{
String cleanBase64Image = base64Image.replace("data:image/png;base64,", "");
try
{
mDecodedString = android.util.Base64.decode(cleanBase64Image, android.util.Base64.DEFAULT);
if (mDecodedString.length == 0) return;
if (mResultHandler != null) mResultHandler.onConvertComplete(mDecodedString);
} catch (Exception e)
{
Toast.makeText(mContext, "Byte �evirimde Hata \n"+e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
@JavascriptInterface
public void processHtml(String htmlContent)
{
if (mWebViewHtmlContentHandler != null)
mWebViewHtmlContentHandler.onGetHtmlContent(htmlContent);
}
@JavascriptInterface
public void onGetHtmlContent(String htmlContent)
{
if (mWebViewHtmlContentHandler2 != null)
mWebViewHtmlContentHandler2.onGetHtmlContent(htmlContent);
}
public static String jsGetHtmlContent()
{
StringBuilder sb = new StringBuilder();
sb.append("javascript:");
sb.append("{ ");
sb.append(" injectedObject.processHtml(document.documentElement.innerHTML);");
sb.append("}");
return sb.toString();
}
public void jsGetHtmlContent(WebView webView,WebViewHtmlContentHandler handler)
{
mWebViewHtmlContentHandler2 = handler;
StringBuilder sb = new StringBuilder();
sb.append("javascript:");
sb.append("{ ");
sb.append(" injectedObject.onGetHtmlContent(document.documentElement.innerHTML);");
sb.append("}");
webView.loadUrl(sb.toString());
}
public String jsElementsByAttributeName()
{
StringBuilder sb = new StringBuilder();
sb.append("function getElementsByAttributeName(tagName, attributeName, attributeValue) { ");
sb.append(" var i, n, objs=[], els=document.getElementsByTagName(tagName), len=els.length;");
sb.append(" for (i=0; i<len; i++) { ");
sb.append(" n = els[i][attributeName]; ");
sb.append(" if (n && (n==attributeValue)) { ");
sb.append(" objs.push(els[i]);");
sb.append(" }");
sb.append(" }");
sb.append(" return objs;");
sb.append("}");
return sb.toString();
}
public String jsExecute()
{
StringBuilder sb = new StringBuilder();
sb.append("javascript: {");
sb.append(JsToDataUrl.buidScript());
sb.append(jsElementsByAttributeName());
sb.append("var img = getElementsByAttributeName('img', 'src', 'https://esgm.sgk.gov.tr/Esgm/Captcha.jpg')[0];");
sb.append("var canvas = document.createElement(\"canvas\");");
sb.append("document.body.appendChild(canvas);");
sb.append("canvas.width = img.width;");
sb.append("canvas.height = img.height;");
sb.append("var ctx = canvas.getContext(\"2d\");");
sb.append("ctx.drawImage(img,0,0,img.clientWidth,img.clientHeight);");
sb.append("var dataURL = canvas.toDataURL();");
sb.append("injectedObject.showBase64Image(dataURL.toString());");
sb.append("}");
return sb.toString();
}
}